<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // fn();
        // function fn(){
        //     console.log('我是fn函数');
        // }
        // fn();


        // 打开浏览器  
        /*  
        fn();
        function fn(){
            console.log('我是fn函数');
        }
        fn();
         */
        // 开始预解析  

        // 第一行 不预解析 
        // 第二行   预解析 
        // 声明一个变量  fn 并且赋值一个函数  
        // 第三行预解析  


        // 预解析结束  存在fn变量  
        // 里边是个函数


        // 开始调用  

        // 第一行正常调用   fn()
            // 预解析函数内部的代码
            // 函数内部不需要预解析  执行  将 内容输出到控制台  
        // 第三行 正常调用  fn()
            // 预解析函数内部的代码
            // 函数内部不需要预解析  执行  将 内容输出到控制台  

            
            // fn1()
            // var fn1 = function(){
            //     console.log('我是fn1函数');
            // }
            // fn1()

            // 打开浏览器 通读代码 

            /* 
            把  fn1()
            var fn1 = function(){
                console.log('我是fn1函数');
            }
            fn1()
 
            看做一个整体
            
            */

            // 开始预解析 

            // 第一行 第三行 不需要预解析  
            // 第二行 按照  var 规则预解析  
            // 声明fn1变量  但是不赋值   


            // 预解析 结束  存在fn1变量  但是里边是 undefined 



            // 开始执行   
            // fn1() 把fn1当做函数调用 但是 fn1里边是 undefined 
            // 所以报错  fn1 is not a function 

            // 第二行  把一个函数赋值给fn1 
            // fn1里边是个函数   

            // 所以第三行正常调用 
                // 先对函数内部的代码预解析  
            




          function fn2(){
             var num = 200;
             console.log(num)
          }

          fn2()


          // 开始预解析  

          // 声明一个变量  fn2 并且赋值一个函数 

          // 预解析结束  fn2 是个函数  


          // 开始执行  

        //   fn2() // fn2当作一个函数调用 
          // fn2 调用  
          // fn2 内部的代码开始预解析 
          // 声明一个变量  num  但是不赋值  
          // 预解析结束 存在num这个变量  


          // 函数内的代码开始执行  
          // 把200赋值给num  


        //   将num输出到控制台



    </script>
</body>
</html>